import cloud from '@hw-agconnect/cloud';
import schema from '../../resources/rawfile/schema.json';

const dbZone = 'user';

import { Database, DatabaseZoneQuery } from '@hw-agconnect/cloud/src/main/ets/database/Database';
import {user} from '../models/database/user'
import { message } from '../models/database/message';
import { bot } from '../models/database/bot';
import emitter from '@ohos.events.emitter';
import { Constants } from '../common/Constants';


class DatabaseHelper {
  static database:Database = cloud.database({objectTypeInfo: schema,zoneName: dbZone});  //dbZone是在AGC中的存储区名称;

  // 1. 向数据库中写入用户数据
  static async user_Add(users:user){
    return await DatabaseHelper.database.collection(user).upsert(users);
  }

  // 2. 向数据库中查询用户的全部数据
  static async user_Get(uid:string):Promise<user[]>{
    return await DatabaseHelper.database.collection(user).query().equalTo('uid',uid).get()
  }

  // 3. 向数据库中查询所有用户数据
  static async user_All_Get():Promise<user[]>{
    return await DatabaseHelper.database.collection(user).query().get()
  }

  // 4. 向数据库中插入一条数据
  static async user_Message_Add(messages:message){
    return await DatabaseHelper.database.collection(message).upsert(messages)
  }

  // 4.1. 订阅数据插入事件
  static async emitter_user_Message_Add(messages:message){
    await this.user_Message_Add(messages)
    // try {
    //   let innerEvent:emitter.InnerEvent={
    //     eventId:1,
    //     priority:emitter.EventPriority.HIGH
    //   }
    //   emitter.emit(innerEvent)
    //   console.log('成功','成功')
    // }catch (err){
    //   console.log('成功','失败')
    // }
  }
  // 4.2 向数据库中插入一组数据
  static async user_Message_Img_Add(messages:message[]){
    return await DatabaseHelper.database.collection(message).upsert(messages)
  }
  // 5. 向数据库中查询当前用户和聊天AI的聊天信息
  static async current_connect_Message_Get(currentId:string,connectId:string){
    return await DatabaseHelper.database.collection(message).query()
      .In('senderId',[currentId,connectId])
      .and()
      .In('receiverId',[currentId,connectId])
      .orderByAsc('messageId')
      .get()
  }

  // 6. 向数据库中查询当前用户的所有聊天信息降序排序
  static async current_All_Message_Get(currentId:string){
    return await DatabaseHelper.database.collection(message).query()
      .equalTo('receiverId',currentId)
      .orderByDesc('messageId')
      .get()
  }

  // 7. 向数据库中查询当前用户可使用的AI
  static async current_All_Ai_Get(currentId:string){
    return await DatabaseHelper.database.collection(bot)
      .query()
      .equalTo('botCreateUser','All')
      .or()
      .equalTo('botCreateUser',currentId)
      .get()
  }

  // 8. 向数据库中查询当前用户对话的机器人
  static async current_chat_Get(botId:string){
    return await DatabaseHelper.database.collection(bot)
      .query()
      .equalTo('botId',botId)
      .get()
  }

  // 9. 向数据库中插入一个机器人
  static async ai_chat_Add(bots:bot){
    return await DatabaseHelper.database.collection(bot)
      .upsert(bots)
  }

  // 10. 查询全部的机器人
  static async ai_chat_all_Get(){
    return await DatabaseHelper.database.collection(bot)
      .query()
      .get()
  }

  // 11. 查询创建的机器人
  static async create_chat_Get(uid:string,botName:string){
    return await DatabaseHelper.database.collection(bot)
      .query()
      .equalTo('botCreateUser',uid)
      .and()
      .equalTo('botName',botName)
      .get()
  }

  // 12. 删除一条信息
  static async message_Delete(messageId:string){
    return await DatabaseHelper.database.collection(message)
      .delete({
        'messageId':messageId
      })
  }

  // 13. 删除一个人和聊天机器人之间的全部数据
  static async current_All_Message_Delete_1(currentId:string,connectId:string){
    try {
      const currentIdAsString = String(currentId);
      const connectIdAsString = String(connectId);
      console.log('dddd',currentId+" "+connectId +" "+ currentIdAsString)
      const record = await DatabaseHelper.database.collection(message)
        .delete({
          'senderId':currentIdAsString,
          'receiverId':connectIdAsString
        })
      console.log('record',JSON.stringify(record))
    }catch (err){
      console.log('dddda',JSON.stringify(err))
    }
  }
  static async current_All_Message_Delete_2(currentId:string,connectId:string){
    return DatabaseHelper.database.collection(message)
      .delete({
        'receiverId':connectId,
        'senderId':currentId
      })
  }
  //TODO：根据编写其他数据库操作方法

}

export default DatabaseHelper;